home *** CD-ROM | disk | FTP | other *** search
/ American Osteopathic Ass…tion Yearbook 2005 & 2006 / American Osteopathic Association Yearbook 2005 & 2006.iso / mac / app / ic.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2004-07-22  |  14.8 KB  |  315 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.3)
  3.  
  4. '''IC wrapper module, based on Internet Config 1.3'''
  5. import icglue
  6. import string
  7. import sys
  8. import os
  9. from Carbon import Res
  10. import Carbon.File as Carbon
  11. import macostools
  12. error = icglue.error
  13. icPrefNotFoundErr = -666
  14. icPermErr = -667
  15. icPrefDataErr = -668
  16. icInternalErr = -669
  17. icTruncatedErr = -670
  18. icNoMoreWritersErr = -671
  19. icNothingToOverrideErr = -672
  20. icNoURLErr = -673
  21. icConfigNotFoundErr = -674
  22. icConfigInappropriateErr = -675
  23. ICattr_no_change = -1
  24. icNoPerm = 0
  25. icReadOnlyPerm = 1
  26. icReadWritePerm = 2
  27.  
  28. class ICOpaqueData:
  29.     '''An unparseable IC entry'''
  30.     
  31.     def __init__(self, data):
  32.         self.data = data
  33.  
  34.     
  35.     def __repr__(self):
  36.         return 'ICOpaqueData(%s)' % `self.data`
  37.  
  38.  
  39. _ICOpaqueDataType = type(ICOpaqueData(''))
  40.  
  41. def _decode_default(data, key):
  42.     if len(data) == 0:
  43.         return data
  44.     
  45.     if ord(data[0]) == len(data) - 1:
  46.         return data[1:]
  47.     
  48.     return ICOpaqueData(data)
  49.  
  50.  
  51. def _decode_multistr(data, key):
  52.     numstr = ord(data[0]) << 8 | ord(data[1])
  53.     rv = []
  54.     ptr = 2
  55.     for i in range(numstr):
  56.         strlen = ord(data[ptr])
  57.         str = data[ptr + 1:ptr + strlen + 1]
  58.         rv.append(str)
  59.         ptr = ptr + strlen + 1
  60.     
  61.     return rv
  62.  
  63.  
  64. def _decode_fontrecord(data, key):
  65.     size = ord(data[0]) << 8 | ord(data[1])
  66.     face = ord(data[2])
  67.     namelen = ord(data[4])
  68.     return (size, face, data[5:5 + namelen])
  69.  
  70.  
  71. def _decode_boolean(data, key):
  72.     return ord(data[0])
  73.  
  74.  
  75. def _decode_text(data, key):
  76.     return data
  77.  
  78.  
  79. def _decode_charset(data, key):
  80.     return (data[:256], data[256:])
  81.  
  82.  
  83. def _decode_appspec(data, key):
  84.     namelen = ord(data[4])
  85.     return (data[0:4], data[5:5 + namelen])
  86.  
  87.  
  88. def _code_default(data, key):
  89.     return chr(len(data)) + data
  90.  
  91.  
  92. def _code_multistr(data, key):
  93.     numstr = len(data)
  94.     rv = chr(numstr >> 8 & 255) + chr(numstr & 255)
  95.     for i in data:
  96.         rv = rv + _code_default(i)
  97.     
  98.     return rv
  99.  
  100.  
  101. def _code_fontrecord(data, key):
  102.     (size, face, name) = data
  103.     return chr(size >> 8 & 255) + chr(size & 255) + chr(face & 255) + chr(0) + _code_default(name)
  104.  
  105.  
  106. def _code_boolean(data, key):
  107.     print 'XXXX boolean:', `data`
  108.     return chr(data)
  109.  
  110.  
  111. def _code_text(data, key):
  112.     return data
  113.  
  114.  
  115. def _code_charset(data, key):
  116.     return data[0] + data[1]
  117.  
  118.  
  119. def _code_appspec(data, key):
  120.     return data[0] + _code_default(data[1])
  121.  
  122. _decoder_table = {
  123.     'ArchieAll': (_decode_multistr, _code_multistr),
  124.     'UMichAll': (_decode_multistr, _code_multistr),
  125.     'InfoMacAll': (_decode_multistr, _code_multistr),
  126.     'ListFont': (_decode_fontrecord, _code_fontrecord),
  127.     'ScreenFont': (_decode_fontrecord, _code_fontrecord),
  128.     'PrinterFont': (_decode_fontrecord, _code_fontrecord),
  129.     'Signature': (_decode_text, _code_text),
  130.     'Plan': (_decode_text, _code_text),
  131.     'MailHeaders': (_decode_text, _code_text),
  132.     'NewsHeaders': (_decode_text, _code_text),
  133.     'CharacterSet': (_decode_charset, _code_charset),
  134.     'Helper\xa5': (_decode_appspec, _code_appspec),
  135.     'NewMailFlashIcon': (_decode_boolean, _code_boolean),
  136.     'NewMailDialog': (_decode_boolean, _code_boolean),
  137.     'NewMailPlaySound': (_decode_boolean, _code_boolean),
  138.     'NoProxyDomains': (_decode_multistr, _code_multistr),
  139.     'UseHTTPProxy': (_decode_boolean, _code_boolean),
  140.     'UseGopherProxy': (_decode_boolean, _code_boolean),
  141.     'UseFTPProxy': (_decode_boolean, _code_boolean),
  142.     'UsePassiveFTP': (_decode_boolean, _code_boolean) }
  143.  
  144. def _decode(data, key):
  145.     if '\xa5' in key:
  146.         key2 = key[:string.index(key, '\xa5') + 1]
  147.     else:
  148.         key2 = key
  149.     if _decoder_table.has_key(key2):
  150.         decoder = _decoder_table[key2][0]
  151.     else:
  152.         decoder = _decode_default
  153.     return decoder(data, key)
  154.  
  155.  
  156. def _code(data, key):
  157.     if type(data) == _ICOpaqueDataType:
  158.         return data.data
  159.     
  160.     if '\xa5' in key:
  161.         key2 = key[:string.index(key, '\xa5') + 1]
  162.     else:
  163.         key2 = key
  164.     if _decoder_table.has_key(key2):
  165.         coder = _decoder_table[key2][1]
  166.     else:
  167.         coder = _code_default
  168.     return coder(data, key)
  169.  
  170.  
  171. class IC:
  172.     
  173.     def __init__(self, signature = 'Pyth', ic = None):
  174.         if ic:
  175.             self.ic = ic
  176.         else:
  177.             self.ic = icglue.ICStart(signature)
  178.             if hasattr(self.ic, 'ICFindConfigFile'):
  179.                 self.ic.ICFindConfigFile()
  180.             
  181.         self.h = Res.Resource('')
  182.  
  183.     
  184.     def keys(self):
  185.         rv = []
  186.         self.ic.ICBegin(icReadOnlyPerm)
  187.         num = self.ic.ICCountPref()
  188.         for i in range(num):
  189.             rv.append(self.ic.ICGetIndPref(i + 1))
  190.         
  191.         self.ic.ICEnd()
  192.         return rv
  193.  
  194.     
  195.     def has_key(self, key):
  196.         return self.__contains__(key)
  197.  
  198.     
  199.     def __contains__(self, key):
  200.         
  201.         try:
  202.             dummy = self.ic.ICFindPrefHandle(key, self.h)
  203.         except icglue.error:
  204.             return 0
  205.  
  206.         return 1
  207.  
  208.     
  209.     def __getitem__(self, key):
  210.         attr = self.ic.ICFindPrefHandle(key, self.h)
  211.         return _decode(self.h.data, key)
  212.  
  213.     
  214.     def __setitem__(self, key, value):
  215.         value = _code(value, key)
  216.         self.ic.ICSetPref(key, ICattr_no_change, value)
  217.  
  218.     
  219.     def launchurl(self, url, hint = ''):
  220.         if url[:6] == 'file:/' and url[6] != '/':
  221.             url = 'file:///' + url[6:]
  222.         
  223.         self.ic.ICLaunchURL(hint, url, 0, len(url))
  224.  
  225.     
  226.     def parseurl(self, data, start = None, end = None, hint = ''):
  227.         if start == None:
  228.             selStart = 0
  229.             selEnd = len(data)
  230.         else:
  231.             selStart = selEnd = start
  232.         if end != None:
  233.             selEnd = end
  234.         
  235.         (selStart, selEnd) = self.ic.ICParseURL(hint, data, selStart, selEnd, self.h)
  236.         return (self.h.data, selStart, selEnd)
  237.  
  238.     
  239.     def mapfile(self, file):
  240.         if type(file) != type(''):
  241.             file = file.as_tuple()[2]
  242.         
  243.         return self.ic.ICMapFilename(file)
  244.  
  245.     
  246.     def maptypecreator(self, type, creator, filename = ''):
  247.         return self.ic.ICMapTypeCreator(type, creator, filename)
  248.  
  249.     
  250.     def settypecreator(self, file):
  251.         file = Carbon.File.pathname(file)
  252.         record = self.mapfile(os.path.split(file)[1])
  253.         MacOS.SetCreatorAndType(file, record[2], record[1])
  254.         macostools.touched(fss)
  255.  
  256.  
  257. _dft_ic = None
  258.  
  259. def launchurl(url, hint = ''):
  260.     global _dft_ic
  261.     if _dft_ic == None:
  262.         _dft_ic = IC()
  263.     
  264.     return _dft_ic.launchurl(url, hint)
  265.  
  266.  
  267. def parseurl(data, start = None, end = None, hint = ''):
  268.     global _dft_ic
  269.     if _dft_ic == None:
  270.         _dft_ic = IC()
  271.     
  272.     return _dft_ic.parseurl(data, start, end, hint)
  273.  
  274.  
  275. def mapfile(filename):
  276.     global _dft_ic
  277.     if _dft_ic == None:
  278.         _dft_ic = IC()
  279.     
  280.     return _dft_ic.mapfile(filename)
  281.  
  282.  
  283. def maptypecreator(type, creator, filename = ''):
  284.     global _dft_ic
  285.     if _dft_ic == None:
  286.         _dft_ic = IC()
  287.     
  288.     return _dft_ic.maptypecreator(type, creator, filename)
  289.  
  290.  
  291. def settypecreator(file):
  292.     global _dft_ic
  293.     if _dft_ic == None:
  294.         _dft_ic = IC()
  295.     
  296.     return _dft_ic.settypecreator(file)
  297.  
  298.  
  299. def _test():
  300.     ic = IC()
  301.     for k in ic.keys():
  302.         
  303.         try:
  304.             v = ic[k]
  305.         except error:
  306.             v = '????'
  307.  
  308.         print k, '\t', v
  309.     
  310.     sys.exit(1)
  311.  
  312. if __name__ == '__main__':
  313.     _test()
  314.  
  315.